/**
 * 固定资产管理系统 - 防刷新版本 5.0
 * 专门用于彻底解决页面刷新问题
 */

(function() {
    'use strict';

    const IS_LOGIN_PAGE = /\/admin\/login\/?$/i.test(window.location.pathname);
    const DEBUG = false; // 如需详细日志，改为 true

    if (IS_LOGIN_PAGE) {
        if (DEBUG) console.log('🛑 Anti-Refresh: 已检测到登录页面，防刷新功能在此页禁用');
        return; // 直接在登录页禁用整个脚本
    }

    if (DEBUG) console.log('🚀 防刷新系统启动中...');

    // 立即执行防刷新措施
    preventAllRefresh();

    // DOM加载完成后执行
    document.addEventListener('DOMContentLoaded', function() {
        if (DEBUG) console.log('✅ 页面加载完成，防刷新措施已生效');
        
        // 初始化基础功能
        initializeBasicFeatures();
        
        // 再次确保防刷新
        preventAllRefresh();
        
        if (DEBUG) console.log('🔒 系统已锁定，禁止自动刷新');
    });

    /**
     * 彻底防止所有类型的页面刷新
     */
    function preventAllRefresh() {
        if (DEBUG) console.log('🛡️ 启动防刷新保护...');
        
        // 1. 禁用所有定时器
        disableAllTimers();
        
        // 2. 禁用自动跳转
        disableAutoRedirect();
        
        // 3. 移除刷新meta标签
        removeRefreshMeta();
        
        // 4. 禁用JavaScript刷新
        disableJavaScriptRefresh();
        
        // 5. 拦截网络请求中的刷新
        interceptRefreshRequests();
        
        if (DEBUG) console.log('✅ 防刷新保护已全面启用');
    }

    /**
     * 禁用所有定时器
     */
    function disableAllTimers() {
        // 保存原始函数
        const originalSetTimeout = window.setTimeout;
        const originalSetInterval = window.setInterval;
        // 保持 rAF 原样，避免影响动画/过渡

        // 重写setTimeout
        let blockedTimeoutCount = 0;
        window.setTimeout = function(callback, delay, ...args) {
            // 放行大部分正常定时器（>=300ms），仅阻断极短延迟，避免刷屏
            if (typeof delay !== 'number' || delay >= 300) {
                return originalSetTimeout.call(this, callback, delay, ...args);
            }
            if (DEBUG && blockedTimeoutCount < 5) {
                console.log('🚫 阻止短时间定时器:', delay);
                blockedTimeoutCount++;
                if (blockedTimeoutCount === 5) console.log('… 省略更多短时定时器日志');
            }
            return null;
        };

        // 重写setInterval  
        let blockedIntervalCount = 0;
        window.setInterval = function(callback, delay, ...args) {
            // 放行较长间隔（>= 60000ms），以避免后台刷屏；其余阻断但减少日志
            if (typeof delay === 'number' && delay >= 60000) {
                return originalSetInterval.call(this, callback, delay, ...args);
            }
            if (DEBUG && blockedIntervalCount < 5) {
                console.log('🚫 阻止定时器间隔:', delay);
                blockedIntervalCount++;
                if (blockedIntervalCount === 5) console.log('… 省略更多短间隔日志');
            }
            return null;
        };

        // 控制动画帧
        if (DEBUG) console.log('✅ 定时器防护已启用');
    }

    /**
     * 禁用自动跳转
     */
    function disableAutoRedirect() {
        // 禁用location.reload
        const originalReload = window.location.reload;
        window.location.reload = function(forcedReload) {
            if (DEBUG) console.log('🚫 阻止页面刷新');
            return false;
        };

        // 禁用location.replace
        const originalReplace = window.location.replace;
        window.location.replace = function(url) {
            if (DEBUG) console.log('🚫 阻止页面替换:', url);
            return false;
        };

        // 监控location.href变化
        let currentHref = window.location.href;
        Object.defineProperty(window.location, 'href', {
            get: function() {
                return currentHref;
            },
            set: function(url) {
                if (url === currentHref) {
                    if (DEBUG) console.log('🚫 阻止相同URL刷新');
                    return;
                }
                if (DEBUG) console.log('⚠️ URL变化:', url);
                currentHref = url;
            }
        });

        if (DEBUG) console.log('✅ 自动跳转防护已启用');
    }

    /**
     * 移除刷新meta标签
     */
    function removeRefreshMeta() {
        // 移除refresh meta标签
        const refreshMetas = document.querySelectorAll('meta[http-equiv="refresh"]');
        refreshMetas.forEach(meta => {
            console.log('🗑️ 移除刷新meta标签');
            meta.remove();
        });

        // 监控新增的meta标签
        const observer = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                mutation.addedNodes.forEach(function(node) {
                    if (node.nodeType === 1) { // Element node
                        if (node.tagName === 'META' && node.getAttribute('http-equiv') === 'refresh') {
                            console.log('🗑️ 阻止新增刷新meta标签');
                            node.remove();
                        }
                    }
                });
            });
        });

        observer.observe(document.head, { childList: true, subtree: true });
        console.log('✅ Meta标签防护已启用');
    }

    /**
     * 禁用JavaScript刷新
     */
    function disableJavaScriptRefresh() {
        // 禁用history操作中的刷新
        const originalPushState = history.pushState;
        const originalReplaceState = history.replaceState;

        history.pushState = function(state, title, url) {
            if (url === window.location.href) {
                if (DEBUG) console.log('🚫 阻止相同URL的pushState');
                return;
            }
            return originalPushState.call(this, state, title, url);
        };

        history.replaceState = function(state, title, url) {
            if (url === window.location.href) {
                if (DEBUG) console.log('🚫 阻止相同URL的replaceState');
                return;
            }
            return originalReplaceState.call(this, state, title, url);
        };

        // 阻止表单的自动提交刷新
        document.addEventListener('submit', function(e) {
            const form = e.target;
            if (form.getAttribute('data-no-refresh') === 'true') {
                if (DEBUG) console.log('🚫 阻止表单刷新提交');
                e.preventDefault();
                return false;
            }
        });

        if (DEBUG) console.log('✅ JavaScript刷新防护已启用');
    }

    /**
     * 拦截网络请求中的刷新
     */
    function interceptRefreshRequests() {
        // 拦截fetch请求
        const originalFetch = window.fetch;
        window.fetch = function(resource, options) {
            if (typeof resource === 'string' && resource.includes('refresh') && DEBUG) {
                console.log('🚫 阻止包含refresh的网络请求:', resource);
                return Promise.reject(new Error('Refresh request blocked'));
            }
            return originalFetch.call(this, resource, options);
        };

        // 拦截XMLHttpRequest
        const originalXHROpen = XMLHttpRequest.prototype.open;
        XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
            if (url && url.includes('refresh') && DEBUG) {
                console.log('🚫 阻止包含refresh的AJAX请求:', url);
                return;
            }
            return originalXHROpen.call(this, method, url, async, user, password);
        };

        if (DEBUG) console.log('✅ 网络请求防护已启用');
    }

    /**
     * 初始化基础功能
     */
    function initializeBasicFeatures() {
        if (DEBUG) console.log('🎨 初始化基础UI功能...');
        
        // 添加基础样式
        addBasicStyles();
        
        // 添加欢迎消息
        showWelcomeMessage();
        
        if (DEBUG) console.log('✅ 基础功能初始化完成');
    }

    /**
     * 添加基础样式
     */
    function addBasicStyles() {
        const style = document.createElement('style');
        style.textContent = `
            /* 防刷新系统样式 */
            .no-refresh-system {
                position: fixed;
                top: 10px;
                left: 10px;
                background: linear-gradient(135deg, #48bb78 0%, #38a169 100%);
                color: white;
                padding: 8px 12px;
                border-radius: 20px;
                font-size: 12px;
                font-weight: 500;
                z-index: 99999;
                box-shadow: 0 2px 8px rgba(0,0,0,0.2);
                pointer-events: none;
            }
            
            /* 加载动画 */
            @keyframes pulse {
                0%, 100% { opacity: 1; }
                50% { opacity: 0.7; }
            }
            
            .pulse {
                animation: pulse 2s infinite;
            }
            
            /* 禁用选择 */
            .no-select {
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
            }
        `;
        document.head.appendChild(style);
    }

    /**
     * 显示欢迎消息
     */
    function showWelcomeMessage() {
        // 创建状态指示器
        const indicator = document.createElement('div');
        indicator.className = 'no-refresh-system pulse';
        indicator.innerHTML = '🔒 防刷新已启用';
        document.body.appendChild(indicator);

        // 3秒后隐藏指示器（若有禁用短时定时器，此处已放行 >=300ms）
        setTimeout(() => {
            if (indicator && indicator.parentNode) {
                indicator.style.opacity = '0';
                indicator.style.transition = 'opacity 0.5s ease';
                setTimeout(() => {
                    if (indicator.parentNode) {
                        indicator.remove();
                    }
                }, 500);
            }
        }, 3000);

        if (DEBUG) console.log('🎉 欢迎使用固定资产管理系统 v5.0 - 防刷新版本');
    }

    // 最终确保：在窗口卸载前再次检查
    window.addEventListener('beforeunload', function(e) {
        if (DEBUG) console.log('⚠️ 检测到页面准备卸载，再次阻止...');
        e.preventDefault();
        e.returnValue = '';
        return '';
    });

    // 页面可见性变化时重新激活防护
    document.addEventListener('visibilitychange', function() {
        if (!document.hidden) {
            if (DEBUG) console.log('👁️ 页面重新可见，重新激活防护');
            preventAllRefresh();
        }
    });

    console.log('🚀 防刷新系统已完全启动！');

})();